Motion blur is an effect seen in photographs taken of a moving object. A camera exposes a sheet of light sensitive film to a scene for a short period of time. The light from the scene hits the film, reacts with the chemicals in the film, and results in the eventual photograph. If the scene changes during the previously described exposure, a blurred image results. Motion blur is present in most films and television programs, and may not be very noticeable, but its presence lends a realistic feeling. In computer animation, it is often desirable to create an effect that is as close to a filmed scene as possible. The absence of motion blur in computer animations is noticeable and makes the animation seem unrealistic. For example, fast movement in an animation that has no motion blur is jerky.
Various techniques have been devised to include motion blur in computer animated scenes. For example, to create motion blur in animated scenes, many additional frames are rendered than previously for display over a particular time period, so that the jerkiness of movement from frame to frame can be smoothed out. However, current techniques for including motion blur in animated scenes have significant limitations. In general, current motion blur techniques do not provide both good quality, and acceptable interaction and efficiency.
FIG. 1 is a block diagram of one traditional post rendering motion blur technique 100. Technique 100 involves a graphics processing unit (GPU) 102 and a software application 104. The software application communicates with a host processor (not shown) and a memory (not shown) in a system. The memory may be shared with other components or functions. The memory includes an accumulation buffer that is used by the application 104. Technique 100 performs scene processing and multi-pass rendering to generate additional samples of scene objects. A scene is rendered, or drawn, in a time t, then another is drawn in a time t+1, t+2, etc. The times define an aperture period, which is analogous to the time a camera aperture is open and exposed to a scene. The rendered scenes are superimposed one on another over the aperture period. The scene thus obtains some motion blur.
Technique 100 executes one rendering pass per image space sample, requiring tens of samples to achieve minimally acceptable quality, and is thus slow. Technique 100 is also fairly limited in its ability to improve motion blur quality. For example, technique 100 is especially limited in it transformation capability. Technique 100 is further limited to applying motion blur in a single direction conforming to a predefined vector.
Technique 100 also potentially imposes a computation burden. If it desirable to apply the application 104 to every scene, the entire process of rendering must be repeated many times, complicating the application 104 because the application program must manage all of the image processing and also display the images. Also, the application 104 takes an object like a sphere, and essentially moves it in space as a whole. Then each reproduced sample is tessellated into triangles and fed to the GPU 102, impacting other graphics processing. The size of the accumulation buffer is a further constraint on the speed and quality of technique 100. In addition, the accumulation buffer draws excess GPU fame buffer resources, trading off desired locality of textures in memory.
FIG. 2 is a block diagram of one traditional pre-rendering motion blur technique 200. Technique 200 involves a graphics processing unit (GPU) 202 and a software application 204. The software application communicates with a host processor (not shown) and a memory (not shown) in a system. The memory may be shared with other components or functions. Technique 200 performs scene processing, and to apply motion blur, geometry amplification. Technique 200 preserves more sample details as compared to technique 100. However, technique 200 imposes geometry amplification at the top of the graphics processing pipeline in the host processor, hence limiting graphics feature orthogonality, consuming additional time, and overloading the host processor to GPU bandwidth. The GPU 202 is required to perform unnecessary computations on a large number of vertices coming into it. As a consequence of these considerations, technique 200 is especially limited to applying motion blur to simple objects.
Techniques 100 and 200 are examples of prior techniques which are demanding of resources including memory and processing bandwidth. Prior techniques are forced to constrain the use of motion blur to limited transformation and/or application to simplified objects, such as spheres.
Because motion blur is traditionally controlled by a software applications which interface with fixed functionality in a GPU, known techniques suffer scalability in the presence of other graphics features, and place an additional burden on the human graphics programmer.